<!-- 排班管理 》 排班日程 -->

<template>
  <CommonBody hasTree :tree="tree" :field="['children', 'id', 'name']" hasReset @change="toChange">
    <template #treeNode="{ data, nodeClass }">
      <div :class="nodeClass">
        <img v-if="data.user" :src="userImg" />
        <span v-if="data.user">{{ data.name }}</span>

        <span v-else>{{ data.name }} ({{ data.userNum }} 人)</span>
      </div>
    </template>

    <MySearch />

    <MyTable />
  </CommonBody>
</template>

<script>
// ============================== 导入依赖 ============================== //

import CORE from '@/CORE'
import store from './store'

// ============================== 导出组件 ============================== //

export default {
  /**
   * 名称定义 (实际使用名称)
   */
  name: 'ScheduleCalendar',

  /**
   * 混入列表 (配置选项合并)
   */
  mixins: [CORE.mixStore(store)],

  /**
   * 组件导入 (Abc.vue + Abc/index.vue)
   */
  ...CORE.components(require.context('./', true, /vue$/)),

  /**
   * 计算属性 (慎用箭头函数)
   */
  computed: {
    /**
     * 用户图标
     */
    userImg: () => CORE.asset('header/User.png'),
  },

  /**
   * 本地方法 (轻量重要在前)
   */
  methods: {
    /**
     * 切换结构树
     */
    toChange(data) {
      const { id, deptId, user } = data || {}
      const { param } = this

      if (CORE.isEmpty(data)) {
        // 点击重置按钮
        CORE.merge(param, { treeId: undefined, deptId: '', userId: '' })
      } else if (user) {
        // 点击用户节点
        CORE.merge(param, { treeId: id, deptId, userId: user.userId })
      } else {
        // 点击组织节点
        CORE.merge(param, { treeId: id, deptId: id, userId: '' })
      }

      // 刷新列表
      this.startList(1)
    },
  },
}
</script>
